#ifndef AI_ENTITY_HPP
#define AI_ENTITY_HPP

////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <vector>

#include <SmegCore/Entity/MovableEntity.hpp>

#include "../Movement/Steering/SteeringManager.hpp"

#include <SmegTools/Debug/DebugNew.hpp>

namespace smeg {
    namespace ai {

////////////////////////////////////////////////////////////
/// Represents an AI entity
////////////////////////////////////////////////////////////
class AIEntity : public core::MovableEntity {
public:
    ////////////////////////////////////////////////////////////
    /// Default Constructor
    ///
    ////////////////////////////////////////////////////////////
                                AIEntity();
    ////////////////////////////////////////////////////////////
    /// Constructor with a texture
    ///
    /// \param _pTexture :      New texture
    ///
    ////////////////////////////////////////////////////////////
    explicit                    AIEntity(   const sf::Texture* _pTexture );
    ////////////////////////////////////////////////////////////
    /// Constructor with a texture and a rectangle
    ///
    /// \param _pTexture :      New texture
    /// \param _TextRectangle :     Rectangle defining the region of the texture to display
    ///
    ////////////////////////////////////////////////////////////
                                AIEntity(   const sf::Texture* _pTexture, 
                                            const sf::IntRect& _TextRectangle );
    ////////////////////////////////////////////////////////////
    /// Copy Constructor
    ///
    /// \param _Copy :          Entity to copy from
    ///
    ////////////////////////////////////////////////////////////
                                AIEntity( const AIEntity& _Copy );
    ////////////////////////////////////////////////////////////
    /// Destructor
    ///
    ////////////////////////////////////////////////////////////
    virtual                     ~AIEntity();

    DECLARE_CLONE_FUNC( AIEntity, core::BaseObject )
        
    ////////////////////////////////////////////////////////////
    /// Update the entity
    ///
    /// \param _fDeltaTime :    Time since the last frame
    ///
    ////////////////////////////////////////////////////////////
    virtual void                Update( float _fDeltaTime );

    /*********************** Accessors ************************/
    SteeringManager*            GetSteeringManager() const;

protected:                
    /******************* Protected members ********************/
    SteeringManager             m_SteeringManager;

#ifdef _DEBUG
public:
    virtual void                DebugRender( sf::RenderWindow* _pRenderWindow, const sf::Color& _Color = sf::Color::White ) const;
#endif // _DEBUG
};

/************************** Inline ************************/
inline SteeringManager* AIEntity::GetSteeringManager() const {
    return const_cast<SteeringManager*>( &m_SteeringManager );
}

    } // namespace ai
} // namespace smeg

#include <SmegTools/Debug/DebugNewOff.hpp>

#endif // AI_ENTITY_HPP